В экосистеме ROCm, переносимость исходного кода часто путают с паритетом производительности. Хотя переносимый код HIP позволяет одному коду выполняться на разных производителях оборудования (AMD и NVIDIA), для достижения максимальной пропускной способности необходимо признать, что переносимость исходного кода и производительность бинарных файлов — это разные вещи.
1. Парадокс переносимости
Программа на HIP является переносимой на уровне исходного кода, то есть синтаксис и логика остаются неизменными. Однако базовая архитектура инструкций (ISA) сильно различается между поколениями (например, AMD GCN против RDNA). «Наивная» сборка, игнорирующая эти различия, может привести к значительным потерям производительности.
2. Чувствительность к архитектуре
Для извлечения максимальной производительности, хорошие бинарные файлы всё ещё чувствительны к архитектурекомпилятор должен оптимизировать распределение регистров, планирование волновых фронтов/вейпов и шаблоны доступа к памяти специально для вычислительных блоков целевой видеокарты. Отсутствие указания целевой архитектуры препятствует использованию специализированного оборудования, такого как матричные узлы сложения-умножения (MFMA).
Функциональная совместимость не означает паритет производительности на уровне бинарных файлов.
3. Требование системы сборки
Масштабирование за пределы «Привет, мир!» требует сложной системы сборки (например, CMake), которая управляет созданием нескольких оптимизированных бинарных путей из одного дерева исходного кода, гарантируя, что правильные инструкции достигнут нужного оборудования.